import sys
import os
sys.path.insert(0, os.path.abspath('../'))
sys.path.insert(0, os.path.abspath('../../'))
import qiskit
provider = qiskit.IBMQ.load_account()
import optuna
from qiskit import Aer
from qiskit.utils import QuantumInstance
from qiskit.ignis.mitigation.measurement import CompleteMeasFitter
from qiskit_optimization.algorithms import MinimumEigenOptimizer
from qiskit.algorithms import QAOA
from shared.QiskitMaxcut import *
from ibm.ibm_parameters import *
%matplotlib inline
print_parameters()
Optimizers: ['SPSA', 'QN-SPSA', 'COBYLA'] with MaxIter of 5 Number of shots: 8000 Repetitions: [ 1; 5 ] Gamma value interval: [ -3.141592653589793; 3.141592653589793 ] Beta value interval: [ 3.141592653589793;-3.141592653589793 ] Number of Optuna Trials: 5 Noise Backend Name: ibmq_toronto
# ---- Define graph and MaxCut ----
graph = load_graph()
max_cut = Maxcut(graph)
max_cut_qubo = max_cut.to_qubo()
max_cut.draw()
def init_qaoa(optimizer, reps, init_parameters):
quantum_instance = QuantumInstance(
backend=Aer.get_backend(DEFAULT_QASM_SIMULATOR),
shots=SHOTS,
measurement_error_mitigation_cls=CompleteMeasFitter,
measurement_error_mitigation_shots=SHOTS)
if optimizer == "QN-SPSA":
# generate QAOA to get ansatz
pre_qaoa = QAOA(optimizer=COBYLA(maxiter=1, tol=0), quantum_instance=quantum_instance, reps=reps, initial_point=init_parameters)
MinimumEigenOptimizer(pre_qaoa).solve(max_cut_qubo)
fidelity = QNSPSA.get_fidelity(pre_qaoa.ansatz)
optimizer = QNSPSA(fidelity, maxiter=MAX_ITER)
qaoa = QAOA(optimizer=optimizer, quantum_instance=quantum_instance, reps=reps,
initial_point=init_parameters)
return qaoa
def run(max_cut_problem, qaoa):
# Run quantum algorithm QAOA
algorithm = MinimumEigenOptimizer(qaoa)
result = algorithm.solve(max_cut_problem)
optimal_parameters = qaoa.optimal_params
return result, optimal_parameters.copy()
def objective(trial):
optimizer_name = trial.suggest_categorical("optimizer", optimizers.keys())
reps = trial.suggest_int('reps', REPS_MIN, REPS_MAX + 1)
parameters = []
for i in range(reps):
parameters.append(trial.suggest_uniform(f'gamma_{i}', GAMMA_MIN, GAMMA_MAX))
for i in range(reps):
parameters.append(trial.suggest_uniform(f'beta_{i}', BETA_MIN, BETA_MAX))
optimizer = optimizers[optimizer_name]
qaoa = init_qaoa(optimizer, reps, parameters)
result, optimal_parameters = run(max_cut_qubo, qaoa)
mean, distribution = max_cut.analyse(result)
trial.set_user_attr(key="best", value=[mean,result,optimal_parameters, optimizer_name])
return mean
study = optuna.create_study(direction='minimize')
study.optimize(objective, n_trials=N_TRIALS, callbacks=[save_best_trial])
[I 2021-08-09 11:02:23,264] A new study created in memory with name: no-name-29da8f9d-5e9d-4a1f-87cc-48207dec263c capi_return is NULL Call-back cb_calcfc_in__cobyla__user__routines failed. [W 2021-08-10 12:05:41,982] Trial 0 failed because of the following error: KeyError(1999004074) Traceback (most recent call last): File "/home/hm-tlacherm/.local/lib/python3.8/site-packages/optuna/_optimize.py", line 216, in _run_trial value_or_values = func(trial) File "/tmp/ipykernel_3967832/1927191478.py", line 13, in objective qaoa = init_qaoa(optimizer, reps, parameters) File "/tmp/ipykernel_3967832/1512632364.py", line 11, in init_qaoa MinimumEigenOptimizer(pre_qaoa).solve(max_cut_qubo) File "/home/hm-tlacherm/.local/lib/python3.8/site-packages/qiskit_optimization/algorithms/minimum_eigen_optimizer.py", line 197, in solve return self._solve_internal(operator, offset, problem_, problem) File "/home/hm-tlacherm/.local/lib/python3.8/site-packages/qiskit_optimization/algorithms/minimum_eigen_optimizer.py", line 210, in _solve_internal eigen_result = self._min_eigen_solver.compute_minimum_eigenvalue(operator) File "/home/hm-tlacherm/.local/lib/python3.8/site-packages/qiskit/algorithms/minimum_eigen_solvers/vqe.py", line 490, in compute_minimum_eigenvalue opt_params, opt_value, nfev = self.optimizer.optimize( File "/home/hm-tlacherm/.local/lib/python3.8/site-packages/qiskit/algorithms/optimizers/scipy_optimizer.py", line 140, in optimize res = minimize( File "/home/hm-tlacherm/.local/lib/python3.8/site-packages/scipy/optimize/_minimize.py", line 615, in minimize return _minimize_cobyla(fun, x0, args, constraints, **options) File "/home/hm-tlacherm/.local/lib/python3.8/site-packages/scipy/optimize/cobyla.py", line 250, in _minimize_cobyla xopt, info = _cobyla.minimize(calcfc, m=m, x=np.copy(x0), rhobeg=rhobeg, File "/home/hm-tlacherm/.local/lib/python3.8/site-packages/scipy/optimize/cobyla.py", line 242, in calcfc f = fun(x, *args) File "/home/hm-tlacherm/.local/lib/python3.8/site-packages/qiskit/algorithms/minimum_eigen_solvers/vqe.py", line 562, in energy_evaluation sampled_expect_op = self._circuit_sampler.convert(expect_op, params=param_bindings) File "/home/hm-tlacherm/.local/lib/python3.8/site-packages/qiskit/opflow/converters/circuit_sampler.py", line 218, in convert sampled_statefn_dicts = self.sample_circuits(circuit_sfns=circs, param_bindings=p_b) File "/home/hm-tlacherm/.local/lib/python3.8/site-packages/qiskit/opflow/converters/circuit_sampler.py", line 329, in sample_circuits results = self.quantum_instance.execute( File "/home/hm-tlacherm/.local/lib/python3.8/site-packages/qiskit/utils/quantum_instance.py", line 661, in execute tmp_result = tmp_fitter.filter.apply( File "/home/hm-tlacherm/.local/lib/python3.8/site-packages/qiskit/ignis/mitigation/measurement/filters.py", line 149, in apply new_counts_list = parallel_map( File "/home/hm-tlacherm/.local/lib/python3.8/site-packages/qiskit/tools/parallel.py", line 132, in parallel_map return [task(values[0], *task_args, **task_kwargs)] File "/home/hm-tlacherm/.local/lib/python3.8/site-packages/qiskit/ignis/mitigation/measurement/filters.py", line 209, in _apply_correction new_counts = self.apply( File "/home/hm-tlacherm/.local/lib/python3.8/site-packages/qiskit/ignis/mitigation/measurement/filters.py", line 182, in apply res = minimize(fun, x0, method='SLSQP', File "/home/hm-tlacherm/.local/lib/python3.8/site-packages/scipy/optimize/_minimize.py", line 617, in minimize return _minimize_slsqp(fun, x0, args, jac, bounds, File "/home/hm-tlacherm/.local/lib/python3.8/site-packages/scipy/optimize/slsqp.py", line 477, in _minimize_slsqp message=exit_modes[int(mode)], success=(mode == 0)) KeyError: 1999004074
--------------------------------------------------------------------------- KeyError Traceback (most recent call last) /tmp/ipykernel_3967832/1956785657.py in <module> 1 study = optuna.create_study(direction='minimize') ----> 2 study.optimize(objective, n_trials=N_TRIALS, callbacks=[save_best_trial]) ~/.local/lib/python3.8/site-packages/optuna/study.py in optimize(self, func, n_trials, timeout, n_jobs, catch, callbacks, gc_after_trial, show_progress_bar) 399 ) 400 --> 401 _optimize( 402 study=self, 403 func=func, ~/.local/lib/python3.8/site-packages/optuna/_optimize.py in _optimize(study, func, n_trials, timeout, n_jobs, catch, callbacks, gc_after_trial, show_progress_bar) 63 try: 64 if n_jobs == 1: ---> 65 _optimize_sequential( 66 study, 67 func, ~/.local/lib/python3.8/site-packages/optuna/_optimize.py in _optimize_sequential(study, func, n_trials, timeout, catch, callbacks, gc_after_trial, reseed_sampler_rng, time_start, progress_bar) 160 161 try: --> 162 trial = _run_trial(study, func, catch) 163 except Exception: 164 raise ~/.local/lib/python3.8/site-packages/optuna/_optimize.py in _run_trial(study, func, catch) 265 266 if state == TrialState.FAIL and func_err is not None and not isinstance(func_err, catch): --> 267 raise func_err 268 return trial 269 ~/.local/lib/python3.8/site-packages/optuna/_optimize.py in _run_trial(study, func, catch) 214 215 try: --> 216 value_or_values = func(trial) 217 except exceptions.TrialPruned as e: 218 # TODO(mamu): Handle multi-objective cases. /tmp/ipykernel_3967832/1927191478.py in objective(trial) 11 optimizer = optimizers[optimizer_name] 12 ---> 13 qaoa = init_qaoa(optimizer, reps, parameters) 14 15 result, optimal_parameters = run(max_cut_qubo, qaoa) /tmp/ipykernel_3967832/1512632364.py in init_qaoa(optimizer, reps, init_parameters) 9 # generate QAOA to get ansatz 10 pre_qaoa = QAOA(optimizer=COBYLA(maxiter=1, tol=0), quantum_instance=quantum_instance, reps=reps, initial_point=init_parameters) ---> 11 MinimumEigenOptimizer(pre_qaoa).solve(max_cut_qubo) 12 fidelity = QNSPSA.get_fidelity(pre_qaoa.ansatz) 13 optimizer = QNSPSA(fidelity, maxiter=MAX_ITER) ~/.local/lib/python3.8/site-packages/qiskit_optimization/algorithms/minimum_eigen_optimizer.py in solve(self, problem) 195 operator, offset = problem_.to_ising() 196 --> 197 return self._solve_internal(operator, offset, problem_, problem) 198 199 def _solve_internal( ~/.local/lib/python3.8/site-packages/qiskit_optimization/algorithms/minimum_eigen_optimizer.py in _solve_internal(self, operator, offset, converted_problem, original_problem) 208 if operator.num_qubits > 0: 209 # approximate ground state of operator using min eigen solver --> 210 eigen_result = self._min_eigen_solver.compute_minimum_eigenvalue(operator) 211 # analyze results 212 raw_samples = None ~/.local/lib/python3.8/site-packages/qiskit/algorithms/minimum_eigen_solvers/vqe.py in compute_minimum_eigenvalue(self, operator, aux_operators) 488 489 start_time = time() --> 490 opt_params, opt_value, nfev = self.optimizer.optimize( 491 num_vars=len(initial_point), 492 objective_function=energy_evaluation, ~/.local/lib/python3.8/site-packages/qiskit/algorithms/optimizers/scipy_optimizer.py in optimize(self, num_vars, objective_function, gradient_function, variable_bounds, initial_point) 138 ) 139 --> 140 res = minimize( 141 fun=objective_function, 142 x0=initial_point, ~/.local/lib/python3.8/site-packages/scipy/optimize/_minimize.py in minimize(fun, x0, args, method, jac, hess, hessp, bounds, constraints, tol, callback, options) 613 **options) 614 elif meth == 'cobyla': --> 615 return _minimize_cobyla(fun, x0, args, constraints, **options) 616 elif meth == 'slsqp': 617 return _minimize_slsqp(fun, x0, args, jac, bounds, ~/.local/lib/python3.8/site-packages/scipy/optimize/cobyla.py in _minimize_cobyla(fun, x0, args, constraints, rhobeg, tol, maxiter, disp, catol, **unknown_options) 248 249 info = np.zeros(4, np.float64) --> 250 xopt, info = _cobyla.minimize(calcfc, m=m, x=np.copy(x0), rhobeg=rhobeg, 251 rhoend=rhoend, iprint=iprint, maxfun=maxfun, 252 dinfo=info) ~/.local/lib/python3.8/site-packages/scipy/optimize/cobyla.py in calcfc(x, con) 240 241 def calcfc(x, con): --> 242 f = fun(x, *args) 243 i = 0 244 for size, c in izip(cons_lengths, constraints): ~/.local/lib/python3.8/site-packages/qiskit/algorithms/minimum_eigen_solvers/vqe.py in energy_evaluation(parameters) 560 561 start_time = time() --> 562 sampled_expect_op = self._circuit_sampler.convert(expect_op, params=param_bindings) 563 means = np.real(sampled_expect_op.eval()) 564 ~/.local/lib/python3.8/site-packages/qiskit/opflow/converters/circuit_sampler.py in convert(self, operator, params) 216 circs = list(self._circuit_ops_cache.values()) if not self._transpiled_circ_cache else None 217 p_b = cast(List[Dict[Parameter, float]], param_bindings) --> 218 sampled_statefn_dicts = self.sample_circuits(circuit_sfns=circs, param_bindings=p_b) 219 220 def replace_circuits_with_dicts(operator, param_index=0): ~/.local/lib/python3.8/site-packages/qiskit/opflow/converters/circuit_sampler.py in sample_circuits(self, circuit_sfns, param_bindings) 327 ready_circs = self._transpiled_circ_cache 328 --> 329 results = self.quantum_instance.execute( 330 ready_circs, had_transpiled=self._transpile_before_bind 331 ) ~/.local/lib/python3.8/site-packages/qiskit/utils/quantum_instance.py in execute(self, circuits, had_transpiled) 659 ) 660 ) --> 661 tmp_result = tmp_fitter.filter.apply( 662 tmp_result, self._meas_error_mitigation_method 663 ) ~/.local/lib/python3.8/site-packages/qiskit/ignis/mitigation/measurement/filters.py in apply(self, raw_data, method) 147 new_result = deepcopy(raw_data) 148 --> 149 new_counts_list = parallel_map( 150 self._apply_correction, 151 [resultidx for resultidx, _ in enumerate(raw_data.results)], ~/.local/lib/python3.8/site-packages/qiskit/tools/parallel.py in parallel_map(task, values, task_args, task_kwargs, num_processes) 130 return [] 131 if len(values) == 1: --> 132 return [task(values[0], *task_args, **task_kwargs)] 133 134 Publisher().publish("terra.parallel.start", len(values)) ~/.local/lib/python3.8/site-packages/qiskit/ignis/mitigation/measurement/filters.py in _apply_correction(self, resultidx, raw_data, method) 207 def _apply_correction(self, resultidx, raw_data, method): 208 """Wrapper to call apply with a counts dictionary.""" --> 209 new_counts = self.apply( 210 raw_data.get_counts(resultidx), method=method) 211 return resultidx, new_counts ~/.local/lib/python3.8/site-packages/qiskit/ignis/mitigation/measurement/filters.py in apply(self, raw_data, method) 180 cons = ({'type': 'eq', 'fun': lambda x: nshots - sum(x)}) 181 bnds = tuple((0, nshots) for x in x0) --> 182 res = minimize(fun, x0, method='SLSQP', 183 constraints=cons, bounds=bnds, tol=1e-6) 184 raw_data2[data_idx] = res.x ~/.local/lib/python3.8/site-packages/scipy/optimize/_minimize.py in minimize(fun, x0, args, method, jac, hess, hessp, bounds, constraints, tol, callback, options) 615 return _minimize_cobyla(fun, x0, args, constraints, **options) 616 elif meth == 'slsqp': --> 617 return _minimize_slsqp(fun, x0, args, jac, bounds, 618 constraints, callback=callback, **options) 619 elif meth == 'trust-constr': ~/.local/lib/python3.8/site-packages/scipy/optimize/slsqp.py in _minimize_slsqp(func, x0, args, jac, bounds, constraints, maxiter, ftol, iprint, disp, eps, callback, **unknown_options) 475 return OptimizeResult(x=x, fun=fx, jac=g[:-1], nit=int(majiter), 476 nfev=feval[0], njev=geval[0], status=int(mode), --> 477 message=exit_modes[int(mode)], success=(mode == 0)) 478 479 KeyError: 1999004074
print(study.best_trial)
--------------------------------------------------------------------------- ValueError Traceback (most recent call last) /tmp/ipykernel_3967832/2634521730.py in <module> ----> 1 print(study.best_trial) ~/.local/lib/python3.8/site-packages/optuna/study.py in best_trial(self) 96 ) 97 ---> 98 return copy.deepcopy(self._storage.get_best_trial(self._study_id)) 99 100 @property ~/.local/lib/python3.8/site-packages/optuna/storages/_in_memory.py in get_best_trial(self, study_id) 309 best_trial_id = self._studies[study_id].best_trial_id 310 if best_trial_id is None: --> 311 raise ValueError("No trials are completed yet.") 312 elif len(self._studies[study_id].directions) > 1: 313 raise ValueError( ValueError: No trials are completed yet.
fig = optuna.visualization.plot_optimization_history(study)
fig.show()
[W 2021-08-10 12:05:45,534] Study instance does not contain trials.
mean, result, optimal_params, optimizer_name = study.user_attrs["best"]
print(f"Optimizer: {optimizer_name}")
print(f"Optimal Parameters: {optimal_params}")
--------------------------------------------------------------------------- KeyError Traceback (most recent call last) /tmp/ipykernel_3967832/355356642.py in <module> ----> 1 mean, result, optimal_params, optimizer_name = study.user_attrs["best"] 2 print(f"Optimizer: {optimizer_name}") 3 print(f"Optimal Parameters: {optimal_params}") KeyError: 'best'
max_cut.draw(result)
--------------------------------------------------------------------------- NameError Traceback (most recent call last) /tmp/ipykernel_3967832/2691994859.py in <module> ----> 1 max_cut.draw(result) NameError: name 'result' is not defined
mean, distribution = max_cut.analyse(result, print_output=True)
max_cut.plot_histogram(distribution, mean)
--------------------------------------------------------------------------- NameError Traceback (most recent call last) /tmp/ipykernel_3967832/1339108312.py in <module> ----> 1 mean, distribution = max_cut.analyse(result, print_output=True) 2 max_cut.plot_histogram(distribution, mean) NameError: name 'result' is not defined
import qiskit.tools.jupyter
%qiskit_version_table
/home/hm-tlacherm/.local/lib/python3.8/site-packages/qiskit/aqua/__init__.py:86: DeprecationWarning: The package qiskit.aqua is deprecated. It was moved/refactored to qiskit-terra For more information see <https://github.com/Qiskit/qiskit-aqua/blob/main/README.md#migration-guide>
| Qiskit Software | Version |
|---|---|
qiskit-terra | 0.18.1 |
qiskit-aer | 0.8.2 |
qiskit-ignis | 0.6.0 |
qiskit-ibmq-provider | 0.16.0 |
qiskit-aqua | 0.9.4 |
qiskit | 0.29.0 |
qiskit-nature | 0.1.5 |
qiskit-optimization | 0.2.1 |
| System information | |
| Python | 3.8.6 (default, Jan 22 2021, 11:41:28) [GCC 8.4.1 20200928 (Red Hat 8.4.1-1)] |
| OS | Linux |
| CPUs | 192 |
| Memory (Gb) | 6046.015735626221 |
| Tue Aug 10 12:05:49 2021 CEST | |